package com.service.runable;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

/**
 * 继承线程类，为了客户端实现多线程访问
 * 客户端的读写类
 */
public class ServiceThread extends  Thread {
    //定义sooket
    private Socket sok;
    //定义集合
    private List<Socket> list;
    //定义客户端的数量
    private int i;



    public ServiceThread(){


    }
    //构造方法传递数据
    public ServiceThread(Socket sok,List<Socket> list,int i){

        this.sok=sok;
        this.list=list;
        this.i=i;

    }

    @Override
    public void run() {
        while(true){
            write();
        }


    }

    public void write(){
        BufferedReader br = null;
        try {
            //字符输入流，用来读取客户端传来的数据信息
             br=new BufferedReader(new InputStreamReader(sok.getInputStream()));


            System.out.println("客户端"+i+"已连接");

             //用来接收输入流读取的数据
            String len="";
            //循环读取数据
            while((len=br.readLine())!=null){
                //循环存放socket的集合，给每个socket传递数据，这里表示服务端给每个客户端传递消息
                for(Socket s:list){
                    //输出流，用来写出到客户端，建议使用PrintWriter
                    BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                    bw.write(len);//写回客户端
                    bw.newLine();//创建新行
                    bw.flush();//刷新流，这里边必须刷新，否则数据到不到8kb不能写回去
                }
                System.out.println("客户端"+i+"传来的消息是:"+len);
            }


        } catch (IOException e) {
            e.printStackTrace();
        }finally {

        }

    }
}
